0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506123bc806100b86000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063d9eb0e9f1161005b578063d9eb0e9f146100ff578063f14210a61461012f578063f3fef3a31461014b578063fa09e6301461016757610088565b806312642e191461008d578063421b2d8b146100bd57806390386bbf146100d957806398575188146100e3575b600080fd5b6100a760048036038101906100a291906114d0565b610183565b6040516100b4919061167d565b60405180910390f35b6100d760048036038101906100d291906116fd565b610478565b005b6100e161052e565b005b6100fd60048036038101906100f891906116fd565b610618565b005b610119600480360381019061011491906116fd565b6106cc565b6040516101269190611745565b60405180910390f35b61014960048036038101906101449190611760565b6106ec565b005b6101656004803603810190610160919061178d565b6107b4565b005b610181600480360381019061017c91906116fd565b6108bb565b005b6060600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146101e157600080fd5b8542811015610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021c9061182a565b60405180910390fd5b60003090506102f98c8b8b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050610a46565b92508a836001855161030b9190611879565b8151811061031c5761031b6118ad565b5b60200260200101511015610365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035c9061194e565b60405180910390fd5b6103db8a8a600081811061037c5761037b6118ad565b5b905060200201602081019061039191906116fd565b888860008181106103a5576103a46118ad565b5b90506020020160208101906103ba91906116fd565b856000815181106103ce576103cd6118ad565b5b6020026020010151610c8f565b610469838b8b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050838a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050610dc5565b50509998505050505050505050565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146104d457600080fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461058a57600080fd5b600030905060008173ffffffffffffffffffffffffffffffffffffffff16319050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610613573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067257600080fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006020528060005260406000206000915054906101000a900460ff1681565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461074857600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156107b0573d6000803e3d6000fd5b5050565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461081057600080fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016108729291906119dc565b6020604051808303816000875af1158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611a31565b50505050565b600115156000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461091757600080fd5b6000309050600082905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161095c9190611a6d565b602060405180830381865afa158015610979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099d9190611a9d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016109fc9291906119dc565b6020604051808303816000875af1158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190611a31565b5050505050565b6060600284511015610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490611b3c565b60405180910390fd5b8351835110610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890611bce565b60405180910390fd5b8351825110610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611c60565b60405180910390fd5b835167ffffffffffffffff811115610b3057610b2f611c80565b5b604051908082528060200260200182016040528015610b5e5781602001602082028036833780820191505090505b5090508481600081518110610b7657610b756118ad565b5b60200260200101818152505060005b60018551610b939190611879565b811015610c8657600080610c02868481518110610bb357610bb26118ad565b5b6020026020010151888581518110610bce57610bcd6118ad565b5b602002602001015189600187610be49190611caf565b81518110610bf557610bf46118ad565b5b6020026020010151610fe5565b91509150610c46848481518110610c1c57610c1b6118ad565b5b60200260200101518383888781518110610c3957610c386118ad565b5b60200260200101516110de565b84600185610c549190611caf565b81518110610c6557610c646118ad565b5b60200260200101818152505050508080610c7e90611ce3565b915050610b85565b50949350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610cc1929190611d2b565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610d0f9190611dc5565b6000604051808303816000865af19150503d8060008114610d4c576040519150601f19603f3d011682016040523d82523d6000602084013e610d51565b606091505b5091509150818015610d7f5750600081511480610d7e575080806020019051810190610d7d9190611a31565b5b5b610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590611e28565b60405180910390fd5b5050505050565b60005b60018451610dd69190611879565b811015610fde57600080858381518110610df357610df26118ad565b5b602002602001015186600185610e099190611caf565b81518110610e1a57610e196118ad565b5b6020026020010151915091506000610e3283836111e3565b509050600088600186610e459190611caf565b81518110610e5657610e556118ad565b5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610e9e57826000610ea2565b6000835b91509150600060028b51610eb69190611879565b8810610ec25789610eea565b88600189610ed09190611caf565b81518110610ee157610ee06118ad565b5b60200260200101515b9050888881518110610eff57610efe6118ad565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff811115610f4057610f3f611c80565b5b6040519080825280601f01601f191660200182016040528015610f725781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401610f929493929190611ea3565b600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b50505050505050505050508080610fd690611ce3565b915050610dc8565b5050505050565b6000806000610ff485856111e3565b5090506000808773ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110699190611f71565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146110c85780826110cb565b81815b8095508196505050505050935093915050565b6000808511611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990612036565b60405180910390fd5b6000841180156111325750600083115b611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906120c8565b60405180910390fd5b6000611186838761130f90919063ffffffff16565b9050600061119d858361130f90919063ffffffff16565b905060006111c8836111ba6127108a61130f90919063ffffffff16565b61137c90919063ffffffff16565b905080826111d69190612117565b9350505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b906121ba565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061128e578284611291565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff9061224c565b60405180910390fd5b9250929050565b600080821480611337575082828385611328919061226c565b9250826113359190612117565b145b611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d906122fa565b60405180910390fd5b92915050565b600082828461138b9190611caf565b91508110156113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612366565b60405180910390fd5b92915050565b600080fd5b600080fd5b6000819050919050565b6113f2816113df565b81146113fd57600080fd5b50565b60008135905061140f816113e9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261143a57611439611415565b5b8235905067ffffffffffffffff8111156114575761145661141a565b5b6020830191508360208202830111156114735761147261141f565b5b9250929050565b60008083601f8401126114905761148f611415565b5b8235905067ffffffffffffffff8111156114ad576114ac61141a565b5b6020830191508360208202830111156114c9576114c861141f565b5b9250929050565b600080600080600080600080600060c08a8c0312156114f2576114f16113d5565b5b60006115008c828d01611400565b99505060206115118c828d01611400565b98505060408a013567ffffffffffffffff811115611532576115316113da565b5b61153e8c828d01611424565b975097505060606115518c828d01611400565b95505060808a013567ffffffffffffffff811115611572576115716113da565b5b61157e8c828d01611424565b945094505060a08a013567ffffffffffffffff8111156115a1576115a06113da565b5b6115ad8c828d0161147a565b92509250509295985092959850929598565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6115f4816113df565b82525050565b600061160683836115eb565b60208301905092915050565b6000602082019050919050565b600061162a826115bf565b61163481856115ca565b935061163f836115db565b8060005b8381101561167057815161165788826115fa565b975061166283611612565b925050600181019050611643565b5085935050505092915050565b60006020820190508181036000830152611697818461161f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116ca8261169f565b9050919050565b6116da816116bf565b81146116e557600080fd5b50565b6000813590506116f7816116d1565b92915050565b600060208284031215611713576117126113d5565b5b6000611721848285016116e8565b91505092915050565b60008115159050919050565b61173f8161172a565b82525050565b600060208201905061175a6000830184611736565b92915050565b600060208284031215611776576117756113d5565b5b600061178484828501611400565b91505092915050565b600080604083850312156117a4576117a36113d5565b5b60006117b2858286016116e8565b92505060206117c385828601611400565b9150509250929050565b600082825260208201905092915050565b7f556e6976657273616c53776170526f757465723a204558504952454400000000600082015250565b6000611814601c836117cd565b915061181f826117de565b602082019050919050565b6000602082019050818103600083015261184381611807565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611884826113df565b915061188f836113df565b92508282039050818111156118a7576118a661184a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f556e6976657273616c53776170526f757465723a20494e53554646494349454e60008201527f545f4f55545055545f414d4f554e540000000000000000000000000000000000602082015250565b6000611938602f836117cd565b9150611943826118dc565b604082019050919050565b600060208201905081810360008301526119678161192b565b9050919050565b6000819050919050565b600061199361198e6119898461169f565b61196e565b61169f565b9050919050565b60006119a582611978565b9050919050565b60006119b78261199a565b9050919050565b6119c7816119ac565b82525050565b6119d6816113df565b82525050565b60006040820190506119f160008301856119be565b6119fe60208301846119cd565b9392505050565b611a0e8161172a565b8114611a1957600080fd5b50565b600081519050611a2b81611a05565b92915050565b600060208284031215611a4757611a466113d5565b5b6000611a5584828501611a1c565b91505092915050565b611a67816116bf565b82525050565b6000602082019050611a826000830184611a5e565b92915050565b600081519050611a97816113e9565b92915050565b600060208284031215611ab357611ab26113d5565b5b6000611ac184828501611a88565b91505092915050565b7f556e6976657273616c537761704c6962726172793a20494e56414c49445f504160008201527f5448000000000000000000000000000000000000000000000000000000000000602082015250565b6000611b266022836117cd565b9150611b3182611aca565b604082019050919050565b60006020820190508181036000830152611b5581611b19565b9050919050565b7f556e6976657273616c537761704c6962726172793a20494e535546494349454e60008201527f545f504149525300000000000000000000000000000000000000000000000000602082015250565b6000611bb86027836117cd565b9150611bc382611b5c565b604082019050919050565b60006020820190508181036000830152611be781611bab565b9050919050565b7f556e6976657273616c537761704c6962726172793a20494e535546494349454e60008201527f545f504149525f4645455f524154455300000000000000000000000000000000602082015250565b6000611c4a6030836117cd565b9150611c5582611bee565b604082019050919050565b60006020820190508181036000830152611c7981611c3d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000611cba826113df565b9150611cc5836113df565b9250828201905080821115611cdd57611cdc61184a565b5b92915050565b6000611cee826113df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d2057611d1f61184a565b5b600182019050919050565b6000604082019050611d406000830185611a5e565b611d4d60208301846119cd565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015611d88578082015181840152602081019050611d6d565b60008484015250505050565b6000611d9f82611d54565b611da98185611d5f565b9350611db9818560208601611d6a565b80840191505092915050565b6000611dd18284611d94565b915081905092915050565b7f5472616e7366657248656c7065723a205452414e534645525f4641494c454400600082015250565b6000611e12601f836117cd565b9150611e1d82611ddc565b602082019050919050565b60006020820190508181036000830152611e4181611e05565b9050919050565b600082825260208201905092915050565b6000601f19601f8301169050919050565b6000611e7582611d54565b611e7f8185611e48565b9350611e8f818560208601611d6a565b611e9881611e59565b840191505092915050565b6000608082019050611eb860008301876119cd565b611ec560208301866119cd565b611ed26040830185611a5e565b8181036060830152611ee48184611e6a565b905095945050505050565b60006dffffffffffffffffffffffffffff82169050919050565b611f1281611eef565b8114611f1d57600080fd5b50565b600081519050611f2f81611f09565b92915050565b600063ffffffff82169050919050565b611f4e81611f35565b8114611f5957600080fd5b50565b600081519050611f6b81611f45565b92915050565b600080600060608486031215611f8a57611f896113d5565b5b6000611f9886828701611f20565b9350506020611fa986828701611f20565b9250506040611fba86828701611f5c565b9150509250925092565b7f556e6976657273616c537761704c6962726172793a20494e535546464943494560008201527f4e545f494e5055545f414d4f554e540000000000000000000000000000000000602082015250565b6000612020602f836117cd565b915061202b82611fc4565b604082019050919050565b6000602082019050818103600083015261204f81612013565b9050919050565b7f556e6976657273616c537761704c6962726172793a20494e535546464943494560008201527f4e545f4c49515549444954590000000000000000000000000000000000000000602082015250565b60006120b2602c836117cd565b91506120bd82612056565b604082019050919050565b600060208201905081810360008301526120e1816120a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612122826113df565b915061212d836113df565b92508261213d5761213c6120e8565b5b828204905092915050565b7f556e6976657273616c537761704c6962726172793a204944454e544943414c5f60008201527f4144445245535345530000000000000000000000000000000000000000000000602082015250565b60006121a46029836117cd565b91506121af82612148565b604082019050919050565b600060208201905081810360008301526121d381612197565b9050919050565b7f556e6976657273616c537761704c6962726172793a205a45524f5f414444524560008201527f5353000000000000000000000000000000000000000000000000000000000000602082015250565b60006122366022836117cd565b9150612241826121da565b604082019050919050565b6000602082019050818103600083015261226581612229565b9050919050565b6000612277826113df565b9150612282836113df565b9250828202612290816113df565b915082820484148315176122a7576122a661184a565b5b5092915050565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000600082015250565b60006122e46014836117cd565b91506122ef826122ae565b602082019050919050565b60006020820190508181036000830152612313816122d7565b9050919050565b7f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000600082015250565b60006123506014836117cd565b915061235b8261231a565b602082019050919050565b6000602082019050818103600083015261237f81612343565b905091905056fea2646970667358221220d8695a5140eb7d25aec6bed87faf3ae4b8f4d220d94a1231687b206ea03865e064736f6c63430008120033